home *** CD-ROM | disk | FTP | other *** search
/ Garden Fax: Fruits, Vegetables & Herbs / Garden Fax - Fruits, Vegetables & Herbs (1991)(CDTV Publishing)[!].iso / system / basicdemos / demo (.txt) < prev    next >
AmigaBASIC Source Code  |  1978-01-06  |  4KB  |  196 lines

  1. REM --- Demo - Amiga BASIC Graphics demo --- 20-July-85
  2. REM --- Modified 08/87 C. Scheppner - added Close gadget/logic to final window
  3.   DEFINT a-z
  4.  
  5.   wins = 0  'cs
  6.   
  7.   IF FRE(-1)<60000 THEN
  8.     REM --- on 256k machine, this is more limited demo
  9.     WINDOW 1,,,15
  10.     GOSUB InitAnimation
  11.     WHILE (WINDOW(7))
  12.       SLEEP 'Object Collisions will wake us up
  13.     WEND
  14.   ELSE
  15.     WINDOW 1,"Animation",(10,10)-(270,70),15
  16.     WINDOW 2,"Lines",(310,10)-(580,70),30
  17.     WINDOW 3,"Polygons",(10,95)-(270,170),30
  18.     COLOR 1,3
  19.     CLS
  20.     WINDOW 4,"Circles",(310,95)-(580,170),30
  21.     GOSUB InitAnimation
  22.     iDraw = 30
  23.     iErase = 0
  24.     
  25.     wins = 15   'cs  4 bits, 1 for each window
  26.        
  27.     WHILE (wins > 0)
  28.  
  29.       WINDOW OUTPUT 1
  30.       IF WINDOW(7)=0 THEN wins = wins AND 14
  31.       
  32.       NextLine 2
  33.       NextPoly 3
  34.       NextCircle 4
  35.       
  36.     WEND
  37.  
  38.   END IF
  39.  
  40.   END   'cs
  41.  
  42.  
  43. SUB NextLine(win) STATIC
  44.   SHARED iDraw, iErase
  45.   WINDOW OUTPUT win
  46.   'See if user closed the window
  47.   IF WINDOW(7)=0 THEN 
  48.      wins = wins AND 13   'cs
  49.      EXIT SUB
  50.   END IF
  51.   DrawLine iDraw,1
  52.   DrawLine iErase,0
  53.   END SUB
  54.   
  55. SUB DrawLine(iStep, fDraw) STATIC
  56.   GetWindowDim winWidth, winHeight
  57.   iStep = (iStep + 1) MOD 60
  58.   hue = fDraw * ((iStep MOD 3) + 1)
  59.   side = INT(iStep / 15)
  60.   i!=(iStep MOD 15)/15
  61.   i1!=1-i!
  62.   ON side+1 GOSUB top,left,bottom,right
  63.   EXIT SUB
  64. top:
  65.   LINE(winWidth*i!,0)-(winWidth,winHeight*i!),hue
  66.   RETURN
  67. left:
  68.   LINE(winWidth,winHeight*i!)-(winWidth*i1!,winHeight),hue
  69.   RETURN
  70. bottom:
  71.   LINE(winWidth*i1!,winHeight)-(0,winHeight*i1!),hue
  72.   RETURN
  73. right:
  74.   LINE(0,winHeight*i1!)-(winWidth*i!,0),hue
  75.   RETURN
  76. END SUB
  77.  
  78. SUB NextPoly(win) STATIC
  79.   WINDOW OUTPUT win
  80.   'See if user closed the window
  81.   IF WINDOW(7)=0 THEN 
  82.      wins = wins AND 11  'cs
  83.      EXIT SUB
  84.   END IF
  85.   GetWindowDim winWidth, winHeight
  86.   i=(i MOD 8) + 1
  87.   IF i=1 THEN CLS
  88.   x = winWidth/2
  89.   y = winHeight/2
  90.   cosI! = (9-i)*0.1*COS(i)
  91.   sinI! = (9-i)*0.1*SIN(i)
  92.   XcosI = x*cosI!
  93.   XsinI = x*sinI!
  94.   YcosI = y*cosI!
  95.   YsinI = y*sinI!
  96.   AREA (x+XcosI,y+YsinI)
  97.   AREA (x+XsinI,y-YcosI)
  98.   AREA (x-XcosI,y-YsinI)
  99.   AREA (x-XsinI,y+YcosI)
  100.   COLOR RND*3
  101.   AREAFILL
  102.   END SUB
  103.  
  104. SUB NextCircle(win) STATIC
  105.   WINDOW OUTPUT win
  106.   'See if user closed the window
  107.   IF WINDOW(7)=0 THEN
  108.      winds = wins AND 7  'cs
  109.      EXIT SUB
  110.   END IF
  111.   GetWindowDim winWidth, winHeight
  112.   x = RND*winWidth
  113.   y = RND*winHeight
  114.   radius = RND*30+20
  115.   hue = INT(RND*4)
  116.   CIRCLE (x,y),radius,hue
  117.   PAINT (x,y),hue
  118.   END SUB
  119.  
  120. SUB GetWindowDim(winWidth, winHeight) STATIC
  121.   winWidth = WINDOW(2)
  122.   winHeight = WINDOW(3)
  123.   END SUB
  124.  
  125. InitAnimation:
  126.   WINDOW 1
  127.   LOCATE 4,4
  128.   COLOR 3,2
  129.   PRINT "Amiga Microsoft BASIC"
  130.   COLOR 1,0
  131.   ON COLLISION GOSUB BounceOff
  132.   COLLISION ON
  133.   OPEN "ball" FOR INPUT AS 1
  134.   OBJECT.SHAPE 1,INPUT$(LOF(1),1)
  135.   CLOSE 1
  136.   OBJECT.X 1,60
  137.   OBJECT.Y 1,50
  138.   OBJECT.VX 1,80
  139.   OBJECT.VY 1,80
  140.  
  141.   OBJECT.SHAPE 2,1
  142.   OBJECT.X 2,50
  143.   OBJECT.Y 2,10
  144.   OBJECT.VX 2,40
  145.   OBJECT.VY 2,40
  146.   OBJECT.ON
  147.   OBJECT.START
  148.   RETURN
  149.  
  150. REM - BouncOff is called between BASIC
  151. REM - statements whenever an object
  152. REM - collides with another object or
  153. REM - the border.
  154. BounceOff:
  155.   saveId = WINDOW(1)
  156.   WINDOW OUTPUT 1
  157.   'See if user closed the window
  158.   IF WINDOW(7)=0 THEN RETURN
  159.   'Make object border sensitive to change in wie
  160.   CountDown = CountDown-1
  161.   IF CountDown<0 THEN
  162.     CountDown=10
  163.     OBJECT.CLIP (0,0)-(WINDOW(2),WINDOW(3))
  164.   END IF
  165. BounceLoop:
  166.   i=COLLISION(0)
  167.   IF i=0 THEN BounceExit
  168.   j=COLLISION(i)
  169.   vxi = OBJECT.VX(i)
  170.   vyi = OBJECT.VY(i)
  171.   IF (j=-1 AND vyi < 0) OR (j=-3 AND vyi > 0) THEN
  172.     'object bounced off top or bottom border
  173.     OBJECT.VY i,-vyi
  174.   ELSEIF (j=-2 AND vxi < 0) OR (j=-4 AND vxi > 0) THEN
  175.     'object bounced off left or right border
  176.     OBJECT.VX i,-vxi
  177.   ELSEIF j>0 THEN
  178.     '2 objects bounced off each other
  179.     vyj = OBJECT.VY(j)
  180.     vxj = OBJECT.VX(j)
  181.     IF vyi*vyj < 0 THEN
  182.       OBJECT.VY i,-vyi
  183.       OBJECT.VY j,-vyj
  184.     END IF
  185.     IF vxi*vxj < 0 THEN
  186.       OBJECT.VX i,-vxi
  187.       OBJECT.VX j,-vxj
  188.     END IF
  189.     OBJECT.START j
  190.   END IF
  191.   OBJECT.START i
  192.   GOTO BounceLoop
  193. BounceExit:
  194.   WINDOW OUTPUT saveId
  195.   RETURN
  196.